import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    goodsData:[],
    arr:[{id:1,count:'1'},{id:2,count:'2'}]
  },
  mutations: {
    //把本地存储的值初始化到state中,(此方法可存储state中的所有数据)
    initvuexstate(state,newstate){
      //临时存储中的值
      let newdata = JSON.parse(newstate)

      //对象遍历赋值给state
      for(let key in newdata){
        state[key] = newdata[key]
      }
      //相当于执行以下代码
      // state.name = (JSON.parse(newstate)).name
      // state.infolist = (JSON.parse(newstate)).infolist
      // state.arr = (JSON.parse(newstate)).arr
      // state.age = (JSON.parse(newstate)).age
    },


    //初始化详情数据，并添加个计数num属性
    getGoodsData(state,valarr){
      for(let obj of valarr){
        for(let child of obj.foods){
          child.num = 0
        }
      }
      state.goodsData = valarr
      console.log(state.goodsData);

      //每次数据发生变化，都存储到本地
      sessionStorage.vuexdata = JSON.stringify(state)
      
    },

    //改变num的值
    addNum(state,itemobject){
      for(let obj of state.goodsData){
        for(let child of obj.foods){
          if(child.id == itemobject.id){
            child.num += itemobject.num
          }
        }
      }
      //每次数据发生变化，都存储到本地
      sessionStorage.vuexdata = JSON.stringify(state)
    },
    //把全部num修改为0
    alterNum(state){
      for(let obj of state.goodsData){
        for(let child of obj.foods){
          child.num = 0
        }
      }
      //每次数据发生变化，都存储到本地
      sessionStorage.vuexdata = JSON.stringify(state)
    }
  },
    //可以对state中的数据进行运算，并返回一个值
  //可以缓存结果，当依赖发生变化时才会重复运算，性能超级高
  //getters属于vuex，用来运算state的值
  //computed属于vue，用来运算vue的值
  getters:{
    shopcarlist(state){
    //过滤并返回num>0的数组
    let arr:Array<any> =[]

    for(let obj of state.goodsData){
      for(let child of obj.foods){
        if(child.num>0){
          arr.push(child)
        }  
      }
    }
    return arr
    }

  },
  actions: {
  },
  modules: {
  }
})
